package collection;

import com.sun.org.apache.xerces.internal.xinclude.XPointerElementHandler;
/**
 * 元素的toString方法与equals方法对集合操作的影响
 */

import java.awt.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;

public class CollectionDemo2 {
    public static void main(String[] args) {
        Collection c = new ArrayList();//ArrayList可以放重复元素
        Collection d = new HashSet();//HashSet是Set集合常用的实现类，不能存放重复元素
        c.add(new Point(1,2));
        c.add(new Point(3,4));
        c.add(new Point(5,6));
        c.add(new Point(7,8));
        c.add(new Point(9,0));
        c.add(new Point(1,2));
        /*
           集合重写了to String方法，字符串格式：
           [元素1.toString(),元素2.toString(),元素3toString().......]
         */
        System.out.println(c); //collection.Point@元素地址,所以Point类里也是要重写toString()的


        Point p = new Point(1,2);
        /*
            boolean contains(Object obj)
            判断当前集合是否包含给定元素
            判断包含的依据：该元素是否于集合现有元素存在equals比较为true的情况，
            存在则认为包含该元素。

            注意：记住“==”比较的是地址，equals属于Object的方法，所以我们在Point类里重写了equals方法后，这里才是比较元素，而不是地址
                 p是new出来的，地址跟集合c内的是不一样的，如果没重写equals，那结果是false
         */
        boolean contains = c.contains(p);
        System.out.println("是否包含："+contains);


        /*
            boolean remove(Object o)
            从集合中删除给定元素
            删除的是集合中与给定元素equals比较为true的元素,
            对于List而言，如果是重复元素，仅删除靠前的第一个元素，并非把重复的所有该元素都删掉
         */
        c.remove(p);
        System.out.println(c);
    }
}
